package a24_PolymorphicPractice;

/**
 * @Author quan
 * @Description 独立于继承体系之外的类
 * @Date 2023/2/12 22:47
 */
public class Person {
    private String name;
    private int age;

    public Person() {

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    /*  方法1：每种动物都写一个，分开写//饲养狗
    public void keepPet(Dog dog, String something){
        System.out.println("年龄为"+age+"的"+name+"养了一只"+dog.getColor()+"的"+dog.getAge()+"岁的狗");
        //调用狗这个类中的方法
        dog.eat(something);
    }
    //饲养猫----方法的重载
    public void keepPet(Cat cat, String something){
        System.out.println("年龄为"+age+"的"+name+"养了一只"+cat.getColor()+"的"+cat.getAge()+"岁的猫");
        //调用猫这个类中的方法
        cat.eat(something);
    }*/

    //方法2：使用多态的方法写：弊端：后边只能统一写为动物，不能写具体的猫狗
    public void keepPet(Animal a, String something){
        //弊端：不能调用猫狗中的 特有方法---->解决办法：使用Instance of 判断是不是Dog类型,是的话后做强转对象名叫做d
        if(a instanceof Dog) {//自己的JDK版本不支持这种写法：a instanceof Cat c
            Dog d = (Dog) a;
            System.out.println("年龄为"+age+"的"+name+"养了一只"+d.getColor()+"的"+d.getAge()+"岁的狗");
            d.eat(something);
        }else if(a instanceof Cat ){
            Cat c = (Cat) a;
            System.out.println("年龄为"+age+"的"+name+"养了一只"+c.getColor()+"的"+c.getAge()+"岁的狗");
            c.eat(something);
        }else{
            System.out.println("没有这种动物");
        }
//        System.out.println("年龄为"+age+"的"+name+"养了一只"+a.getColor()+"的"+a.getAge()+"岁的动物");
        //调用猫这个类中的方法

    }
}
